package org.huangrui.spark.scala.core.rdd.operate.transform

import org.apache.spark.{SparkConf, SparkContext}

/**
 * @Author hr
 * @Create 2024-10-17 14:43 
 */
object Spark08_Operate_Transform_KV {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local[*]").setAppName("spark")
    val sc = new SparkContext(conf)
    // TODO KV类型一般表示 2元组
    //      Spark RDD会整体数据的处理就称之为单值类型的数据处理
    //      Spark RDD会KV数据个体的处理就称之为KV类型的数据处理: K 和 V 不作为整体使用
    val tuples = List(("a", 1), ("b", 2), ("c", 3))
    // sc.parallelize(tuples,2).map((t: (String, Int)) => (t._1,t._2 * 2)).foreach(println)
    // TODO 上面的代码不是对KV类型饿数据进行处理，还是单值类型处理，是将2元组当成一个整体来使用。
    val rdd = sc parallelize(tuples, 2)
    // TODO mapValues方法只对 V进行处理，K不做任何操作，mapValues方法不会改变RDD的分区数
    rdd.mapValues((v: Int) => v * 2).foreach(println)

    sc.stop()
  }
}
